package com.mike.uaa.web.redis;

import com.mike.uaa.core.Authentication;
import org.springframework.data.redis.core.RedisCallback;

/**
 * @author z
 */
public interface AuthenticationRepository {

    /**
     * 保存认证信息
     *
     * @param authentication 待保存数据
     */
    void save(Authentication authentication);

    /**
     * 通过token value获取认证对象
     *
     * @param tokenValue 从请求数据中获取的token值
     * @return 返回认证信息
     */
    Authentication findById(String tokenValue);

    /**
     * 通过token value 删除数据
     *
     * @param tokenValue 待删除key
     */
    void deleteById(String tokenValue);

    /**
     * 刷新过期时间
     */
    void refresh(Authentication authentication);

    /**
     * 执行redis命令
     *
     * @param callback 待执行命令
     * @param <T>      返回值的类型
     * @return 返回执行结果
     */
    <T> T execute(RedisCallback<T> callback);
}
